package com.product.android.commonInterface;

import java.util.HashMap;

import android.util.Log;

public enum CommonInterfaceManager {
	INSTANCE;
//	private static CommonInterfaceManager mInstance;

	private HashMap<Integer,ICommonInterObserver> mCIObservers=new HashMap<Integer,ICommonInterObserver>();
	
	//具体里面可以再细化，以优化switch数据
	//调用时注意：
	//1.接口实现中 有耗时或者通信等，需要在这边标明，调用方自己起线程，
	//2.接口实现中 需要跳转界面等操作， 需标明
	//	具体定义 见CIConst.java	
	//3.具体模块里面提供的接口较多的的话， 为提高switch效率，可以再分段
	
//	public static CommonInterfaceManager getInstance(){
//		if (mInstance==null){
//			mInstance=new CommonInterfaceManager();
//		}
//		return mInstance;
//	}

	/**
	 * @n<b>函数名称</b>     :registStateObserver
	 * @brief  注册接口实现，后续动态加载模块考虑，已注册方式
	 * @see
	 * @since    Ver 1.3.0
	 * @param  @param moderKey
	 * @param  @param observer
	 * @return void
	 * @<b>作者</b>          :  daiyf
	 * @<b>创建时间</b>      :  2014-2-8下午2:10:24      
	*/
	public void registStateObserver(int moderKey, ICommonInterObserver observer){
		if (!mCIObservers.containsKey(moderKey)){
			//多线程下小概率
			try{
				mCIObservers.put(moderKey, observer);
			}
			catch(Exception e){
				e.printStackTrace();
				Log.w("CommonInterfaceManager", "registStateObserver put error:" + moderKey);
			}
		}
		else{
			Log.w("CommonInterfaceManager", "registStateObserver contain key:" + moderKey);
		}
	}
	
	/**
	 * @n<b>函数名称</b>     :unrigestStateObserver
	 * @brief  取消模块注册，暂不使用
	 * @see
	 * @since    Ver 1.3.0
	 * @param  @param moderKey
	 * @return void
	 * @<b>作者</b>          :  daiyf
	 * @<b>创建时间</b>      :  2014-2-8下午2:28:53      
	*/
	public void unrigestStateObserver(int moderKey){
		mCIObservers.remove(moderKey);
	}
	
	/**
	 * @n<b>函数名称</b>     :CommonInterfaceID
	 * @brief  接口调用方法
	 * @see
	 * @since    Ver 1.3.0
	 * @param  @param moderKey  模块key：1：联系人， 2：聊天， 3：微博， 
	 * 						4：共通NdCommonLibs，5：ERP, 9：其他
	 * @param  @param id  具体模块内实现的id
	 * @param  @param msg
	 * @param  @return
	 * @return int    -9999：模块未注册， -999：模块内ID未找到，其余：具体接口决定
	 * @<b>作者</b>          :  daiyf
	 * @<b>创建时间</b>      :  2014-2-8下午2:11:32      
	*/
	public int CommonInterfaceID(int moderKey, int id, BaseCommonStruct msg){
		ICommonInterObserver modelObs = mCIObservers.get(moderKey);
		if (null != modelObs){
			return modelObs.onCommonInterModelProc(id, msg);	
		}
		return CIConst.COM_RET_NO_MODEL_REGISTER;   
	}

}
